package br.com.ds3.controller;

import java.util.Date;
import java.util.List;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.view.Results;
import br.com.ds3.annotation.Permission;
import br.com.ds3.dao.AtividadeDAO;
import br.com.ds3.dao.EventoDAO;
import br.com.ds3.model.Atividade;
import br.com.ds3.model.Evento;
import br.com.ds3.model.Perfil;

/**
 *
 * @author marcio
 */
@Resource
public class AtividadeController {
    private final Result result;

	private final AtividadeDAO atividadeDAO;
    
    public AtividadeController(Result result, AtividadeDAO atividadeDAO) {
        this.result = result;
        this.atividadeDAO = atividadeDAO;
    }
 
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void pesquisa(String nome, Long pagina) {
    	pagina = (pagina == null ? new Long(1L) : pagina);
        Long paginas = atividadeDAO.countPaginas(nome, null);
    	List<Atividade> atividades = atividadeDAO.pesquisa(nome, null, pagina);
        
        result.include("nome", nome);
        result.include("pagina", pagina);
        result.include("paginas", paginas);
        result.include("atividades", atividades);
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void grava(Atividade atividade) {    	
    	new AtividadeDAO().save(atividade);
    	
    	result.use(Results.json()).withoutRoot().from(atividade).serialize();
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void cadastro(Long id) {
    	Atividade atividade = null;
    	
    	if (id != null) {
    		atividade = new AtividadeDAO().get(id);
    	} else {
    		atividade = new Atividade();
    	}
    	
    	List<Evento> eventos = new EventoDAO().list();
    	
    	result.include("eventos", eventos);
    	result.include("atividade", atividade);
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void inclui() {	
    	result.forwardTo(this).cadastro(null);
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void altera(Long id) {
    	result.forwardTo(this).cadastro(id);
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void exclui(Long id) {
    	AtividadeDAO atividadeDAO = new AtividadeDAO();
    	
    	atividadeDAO.delete(atividadeDAO.get(id));
    	
    	result.use(Results.status()).ok();
    }
    
    @Get
    public void lista(Long idEvento) {
    	List<Atividade> atividades = new AtividadeDAO().pesquisa(null, idEvento, null);
    	
    	System.out.println("passou");
    	
    	result.use(Results.json()).withoutRoot().from(atividades).serialize();
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE, Perfil.PARTICIPANTE })  
    public void jaOcorreu(Long id) {   	
    	Atividade atividade = atividadeDAO.get(id);
    	String retorno = "0";
    	if(atividade.getData().before(new Date())) retorno = "1";
    	result.use(Results.json()).withoutRoot().from(retorno).serialize();
    }  
}
